package routes

import (
	"crud-go-projects/user-crud/handlers"

	"github.com/gin-gonic/gin"
)

// SetupRoutes 设置通用 CRUD 路由
func SetupRoutes(r *gin.RouterGroup) {
	// 只保留动态表处理器
	dynamicHandler := handlers.NewDynamicTableHandler()

	// 设置动态表管理路由
	tables := r.Group("/tables")
	{
		// 表管理
		tables.GET("", dynamicHandler.ListTables)
		tables.POST("/:table", dynamicHandler.CreateTable)
		tables.DELETE("/:table", dynamicHandler.DropTable)
		tables.GET("/:table", dynamicHandler.GetTableStructure) // 获取表结构
		tables.PUT("/:table", dynamicHandler.RenameTable)       // 重命名表

		// 列管理
		tables.GET("/:table/columns", dynamicHandler.ListColumns)           // 新增：列出所有列
		tables.POST("/:table/columns", dynamicHandler.AddColumn)            // 添加列
		tables.GET("/:table/columns/:column", dynamicHandler.GetColumn)     // 获取列信息
		tables.PUT("/:table/columns/:column", dynamicHandler.ModifyColumn)  // 修改列
		tables.DELETE("/:table/columns/:column", dynamicHandler.DropColumn) // 删除列

		// 记录管理
		tables.POST("/:table/records", dynamicHandler.InsertRecord)
		tables.GET("/:table/records", dynamicHandler.ListRecords)
		tables.GET("/:table/records/:id", dynamicHandler.GetRecord)
		tables.PUT("/:table/records/:id", dynamicHandler.UpdateRecord)
		tables.DELETE("/:table/records/:id", dynamicHandler.DeleteRecord)
	}

	// 以下是注释掉的代码，保留作为参考
	/*
		// 为了向后兼容，添加重定向
		users := r.Group("/users")
		{
			users.Any("", func(c *gin.Context) {
				c.JSON(200, gin.H{"message": "请使用 /tables/users 端点来管理用户"})
			})

			users.Any("/:id", func(c *gin.Context) {
				c.JSON(200, gin.H{"message": "请使用 /tables/users 端点来管理用户"})
			})
		}

		// 为了向后兼容，添加API重定向
		api := r.Group("/api")
		{
			api.Any("/:entity", func(c *gin.Context) {
				entity := c.Param("entity")
				c.JSON(200, gin.H{"message": fmt.Sprintf("请使用 /tables/%s 端点来管理 %s", entity, entity)})
			})

			api.Any("/:entity/:id", func(c *gin.Context) {
				entity := c.Param("entity")
				c.JSON(200, gin.H{"message": fmt.Sprintf("请使用 /tables/%s 端点来管理 %s", entity, entity)})
			})
		}
	*/
}

// // setupEntityRoutes 设置特定实体的 CRUD 路由
// func setupEntityRoutes(
// 	r *gin.RouterGroup,
// 	entityName string,
// 	createHandler gin.HandlerFunc,
// 	getHandler gin.HandlerFunc,
// 	updateHandler gin.HandlerFunc,
// 	deleteHandler gin.HandlerFunc,
// 	listHandler gin.HandlerFunc,
// ) {
// 	entityGroup := r.Group("/" + entityName)
// 	{
// 		entityGroup.POST("", createHandler)
// 		entityGroup.GET("/:id", getHandler)
// 		entityGroup.PUT("/:id", updateHandler)
// 		entityGroup.DELETE("/:id", deleteHandler)
// 		entityGroup.GET("", listHandler)
// 	}
// }
